#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QIcon>
#include <QPushButton>
#include <QDebug>
#include <QPixmap>
#include <QLineEdit>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 将窗口大小固定死
    setFixedSize(451, 646);

    // 设置程序的标题
    setWindowTitle("火星云音乐");

    // 设置程序的图标（将图片放到资源文件里，放在本地别人是拿不到的）
    QIcon icon(":/picture/icon.png");
    setWindowIcon(icon);

    // 设置头像
    QPixmap headPix(":/picture/headImg.png");
    ui->headLabel->setPixmap(headPix.scaled(ui->headLabel->width(), ui->headLabel->height())); // scaled 比例适配

    // 设置输入框的占位符文本
    ui->accountInfo->setPlaceholderText("请输入账号");
    ui->passwdInfo->setPlaceholderText("请输入密码");

    // 设置输入内容的回显模式
    // 1. QLineEdit::Normal：默认模式，显示用户输入的内容，不作任何修改
    // 2. QLineEdit::Normal：默认模式，显示用户输入的内容，不作任何修改
    // 3. QLineEdit::Password：将用户输入的内容显示为掩码字符（通常为 * 或 •），适用于密码输入框
    // 4. QLineEdit::PasswordEchoOnEdit：只有在输入时显示实际内容，输入完成后自动隐藏内容，显示为掩码字符。这种模式适合一些需要临时显示输入内容的场景
    ui->passwdInfo->setEchoMode(QLineEdit::Password);

    // 信号和槽机制
    /*
       信号（Signal）：
           信号是一种事件通知。当一个对象的状态发生变化时，它可以发出（emit）一个信号。
           信号不需要知道谁会接收它，或是否有任何接收者。
           信号的定义一般是在类中以 signals: 关键字修饰的区域内声明，但不需要具体实现。
           信号会在特定的条件下被触发，例如按钮点击或数据更新。
       槽（Slot）：
           槽是一种特殊的函数，用于响应信号。槽可以是普通成员函数，也可以是 lambda 表达式或静态函数。
           槽函数的作用是处理信号传递的数据并执行特定操作。
       连接（Connect）：
           Qt 提供了 QObject::connect() 函数，用于将信号连接到槽。
           通过 connect() 函数，可以指定哪个信号会触发哪个槽，这种连接可以跨对象。
           一个信号可以连接到多个槽，或者多个信号连接到同一个槽，甚至可以让信号连接到另一个信号。
    */
    // 虽然函数名可以隐式表示函数地址，但在某些特定的模板和语法环境中，需要显示使用 & ，以明确表示获取一个函数的地址
    // 打印一个指向成员函数的指针，如 &MainWindow::handleRegisterSlot 时，编译器会尝试将它转换为布尔值
    // 如果指针不为 nullptr ，那么它会被视为 true ，这是因为 std::cout 无法直接打印指向成员函数的指针地址
    // 如果想查看成员函数的指针地址，需要转换处理：static_cast<void *>(&MainWindow::handleRegisterSlot)
    connect(ui->registerBtn, &QPushButton::clicked, this, &MainWindow::handleRegisterSlot);
    connect(ui->loginBtn, &QPushButton::clicked, this, &MainWindow::handleloginSlot);
}

// 处理注册
void MainWindow::handleRegisterSlot()
{
    qDebug() << "注册按钮被按下了...";

    QString accountInfo = ui->accountInfo->text(); // 拿出账号的文本信息
    QString passwd = ui->passwdInfo->text();       // 拿出密码的文本信息

    qDebug() << "account:" << accountInfo;
    qDebug() << "passwd:" << passwd;
}

// 处理登录
void MainWindow::handleloginSlot()
{
    qDebug() << "登录按钮被按下了...";

    QString accountInfo = ui->accountInfo->text();
    QString passwd = ui->passwdInfo->text();

    qDebug() << "account:" << accountInfo;
    qDebug() << "passwd:" << passwd;
}

MainWindow::~MainWindow()
{
    delete ui;
}
